use std::{
    io::{prelude::*,BufReader},
    net::{TcpListener,TcpStream},
    fs,
};
use rustlang::ThreadPool;



pub fn run(){
    let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
    let pool = ThreadPool::new(4);
    for stream in listener.incoming().take(2) {
        let stream = stream.unwrap();
        pool.execute(||{
            handle_connection(stream);
        })
    }
}


fn handle_connection(mut stream:TcpStream){
    let buf_reader = BufReader::new(&mut stream);
    // let http_request:Vec<_> = buf_reader
    // .lines()
    // .map(|result|result.unwrap())
    // .take_while(|line|!line.is_empty())
    // .collect();
    // println!("Request {:?}",http_request);
    let request_line = buf_reader.lines().next().unwrap().unwrap();
    let (status_line,file_name) = if request_line == "GET / HTTP/1.1" {
        ("HTTP/1.1 200 OK","hello.html")
    }else{
        ("HTTP/1.1 404 NOT FOUND","404.html")
    };

    let contents = fs::read_to_string(file_name).unwrap();
    let length = contents.len();

    let response = format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");

    stream.write_all(response.as_bytes()).unwrap();
}